﻿/****************************************************
 Copyright (C), 2010-2011, ZKHY
 File name:    widget.h  // 文件名
 Author:史孟哲      Version:        Date: 2021/1/31
 Description:    用于服务器端的实现，实现监听功能，接收客户端发送的消息，显示到text edit中，
                 可以向text edit写入信息，点击发送按钮向客户端发送消息，点击断开按钮断开与
                 客户端的链接。
 Others:         无
 Function List:  // 主要函数列表，每条记录应包括函数名及功能简要说明
   1.void display();
   将通信套接字中的内容显示在text edit中
   2.void connection();
   取出通信套接字，接收客户端发送的消息
   3.void on_btn_send_clicked();
   点击发送向客户端发送消息
   4.void on_btn_close_clicked();
   点击断开，断开与客户端的链接
 History:        无
****************************************************/
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>   //监听套接字
#include <QTcpSocket>   //通信套接字
//服务器要两个套接字，客户端只需要监听套接字

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
    QTcpServer * server = NULL;   //监听套接字
    QTcpSocket * socket = NULL;   //通信套接字

private slots:

    /*************************************************
      Function:       display
      Description:    将通信套接字socket中接收到的内容显示到tet_write中
      Calls:          无
      Called By:      connection
      Table Accessed: 无
      Table Updated:  无
      Input:          无
      Output:         无
      Return:         void
      Others:         无
    *************************************************/
    void display();

    /*************************************************
      Function:       connection
      Description:    从监听套接字中取出通信套接字，获取ip和端口，在tet_read中显示用户的信息
                      和“成功链接”,并随时接收服务器发送的消息
      Calls:          display
      Called By:      Widget
      Table Accessed: 无
      Table Updated:  无
      Input:          无
      Output:         无
      Return:         void
      Others:         无
    *************************************************/
    void connection();

    /*************************************************
      Function:       on_btn_send_clicked
      Description:    点击发送，若socket为空则直接返回，若不为空则将tet_write中的内容
                      写入socket发送客户端
      Calls:          无
      Called By:      无
      Table Accessed: 无
      Table Updated:  无
      Input:          无
      Output:         无
      Return:         void
      Others:         无
    *************************************************/
    void on_btn_send_clicked();

    /*************************************************
      Function:       on_btn_close_clicked
      Description:    点击发送，若socket为空则直接返回，若不为空则向socket写入断开连接，
                      断开与服务器的链接并显示"链接已断开"
      Calls:          无
      Called By:      无
      Table Accessed: 无
      Table Updated:  无
      Input:          无
      Output:         无
      Return:         void
      Others:         无
    *************************************************/
    void on_btn_close_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
